iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
自我挑戰組

React 學習之路系列 第 8

事件處理,延伸學習 function bind(Day 8)

  • 分享至 

  • xImage
  •  
<button onClick={this.deleteRow.bind(this, 'id')}>Delete Row</button>

在前一篇裡我們會看到事件傳遞參數裡寫到 bind 這樣的語法,但為什麼要用 bind?
什麼是 bind? 再看 bind 前要先看 this 是什麼

看 W3S 學習 this

  1. 如果沒有任何東西包,this 指向瀏覽器 (BOM) 最上層 global 的 window
  2. 在 Class 的方法裡面,this 指令 Class 物件本身
  3. 在一般函數裡,this 也指向瀏覽器 (BOM) 最上層 global 的 window
  4. 嚴格模式的函數裡,this 是 undefind
  5. 在 event 裡,this 指向該 element
  6. 搭配 call 或 apply ,this 可以指向 call 或 apply 所綁定的物件

因為 5.。 event 本身的 this 會指向元素本身,所以必須只用 bind 去定義 this 要指向什麼物件,也就為什麼會有 this.handleClick = this.handleClick.bind(this) 的使用,讓 this 可以綁定到 Class component 本身。

bind 語法與其他例子

語法

fun.bind(thisArg[, arg1[, arg2[, ...]]])

自己練習寫一個簡單的 bind(按F12,瀏覽器打開 console,貼上下面程式碼)

var element = document.querySelector(".header__logo");

var user = {
    firstname: 'Hu',
    lastname: 'Jim',
    greeting: function(e){
       e.preventDefault();
       alert('My name is ' + this.firstname + this.lastname);
    }
};

user.greeting = user.greeting.bind(user);

element.addEventListener('click', user.greeting);

點擊iT邦幫忙Logo測試畫面

以上今天。

參考資料:
MDN bind
understanding-javascript-function-prototype-bind
W3S keyword this


上一篇
事件處理(Day7)
下一篇
條件 Render ( Day 9 )
系列文
React 學習之路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言